#include "MakeMeshData.h"

MeshData MakeMeshData()
{
    MeshData data;
    data.init();
    // 更复杂的测试模型（删减版本）：
    // Solid: 1个六面体 (Hexahedron) + 1个楔体 (Wedge)
    // Faces: 立方体保留1个四边形面，楔体保留2个三角形面，另外保留2个独立面（1四边形+1三角形）

    // 顶点说明：
    // 0-7   : 立方体
    // 8-11  : 独立四边形
    // 12-13 : 第一条独立线段（用于edges）
    // 14-19 : 楔体 (wedge)
    // 20-22 : 独立三角形
    data.vertex_positions_ = {
        // 立方体 (0-7)
        { 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 1.0, 1.0, 0.0 }, { 0.0, 1.0, 0.0 },
        { 0.0, 0.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 1.0 }, { 0.0, 1.0, 1.0 },
        // 独立四边形 (8-11)
        { 1.5, 0.0, 0.0 }, { 2.5, 0.0, 0.0 }, { 2.5, 1.0, 0.0 }, { 1.5, 1.0, 0.0 },
        // 独立线段1 (12-13)
        { 0.0, 1.5, 0.0 }, { 1.0, 1.5, 0.0 },
        // 楔体 Wedge (14-19)
        { 3.0, 0.0, 0.0 }, { 4.0, 0.0, 0.0 }, { 3.5, 1.0, 0.0 },
        { 3.0, 0.0, 1.0 }, { 4.0, 0.0, 1.0 }, { 3.5, 1.0, 1.0 },
        // 独立三角形 (20-22)
        { 2.0, 1.5, 0.0 }, { 2.5, 1.5, 0.0 }, { 2.25, 2.0, 0.0 }
    };

    // 面（删减）：1个立方体四边形 + 2个楔体三角形 + 2个独立面
    data.face_vertices_ = {
        // 立方体 1 个四边形
        0, 3, 2, 1, // 面0
        // 楔体 2 个三角形
        14, 15, 16, // 面1
        17, 19, 18, // 面2
        // 独立四边形
        8, 9, 10, 11, // 面3
        // 独立三角形
        20, 21, 22 // 面4
    };
    data.face_vertices_offset_ = {
        0, // 面0 起始
        4, // 面1 起始
        7, // 面2 起始
        10, // 面3 起始
        14, // 面4 起始
        17 // 结束
    };

    // 边：保持与原示例一致，覆盖立方体、楔体和独立线段
    data.edge_vertices_ = {
        // 立方体 12 条边 (0-7)
        0, 1, 1, 2, 2, 3, 3, 0,
        4, 5, 5, 6, 6, 7, 7, 4,
        0, 4, 1, 5, 2, 6, 3, 7,
        // 独立线段1
        12, 13,
        // 楔体 9 条边 (底3 + 顶3 + 竖向3)
        14, 15, 15, 16, 16, 14,
        17, 18, 18, 19, 19, 17,
        14, 17, 15, 18, 16, 19,
        // 独立线段2 (三角的一条边)
        20, 21
    };

    // 体：1个六面体 + 1个楔体
    // data.solid_types_ = { VTK_HEXAHEDRON, VTK_WEDGE };
    data.solid_types_ = { 12, 13 };
    data.solid_vertices_ = {
        // Hex (8点)
        0, 1, 2, 3, 4, 5, 6, 7,
        // Wedge (6点)
        14, 15, 16, 17, 18, 19
    };
    data.solid_vertices_offset_ = { 0, 8, 14 }; // 2 个 cell

    // polyhedral 相关留空
    data.solid_faces_offset_ = { 0, 0, 0 };

    // Block: 根据删减后的面索引重新划分
    // Block1 -> 立方体 1 个面 (0)
    // Block2 -> 楔体    2 个面 (1,2)
    // Block3 -> 独立面  2 个面 (3,4)
    data.blocks_.clear();
    {
        auto b1 = std::make_unique<Block>();
        b1->patchIDs = { 1 }; // Patch 1 包含面0
        data.blocks_[1] = std::move(b1);

        auto b2 = std::make_unique<Block>();
        b2->patchIDs = { 2 }; // Patch 2 包含面1,2
        data.blocks_[2] = std::move(b2);

        auto b3 = std::make_unique<Block>();
        b3->patchIDs = { 3, 4 }; // Patch 3,4 分别包含面3,4
        data.blocks_[3] = std::move(b3);
    }

    return data;
}
